package com.example.livemall.service.impl;

import com.example.livemall.entity.Item;
import com.example.livemall.mapper.ImgsMapper;
import com.example.livemall.mapper.InfoMapper;
import com.example.livemall.mapper.ProductDetailsMapper;
import com.example.livemall.service.ProductDetailsService;
import com.example.livemall.utils.RedisCache;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;

/**
 * 商品详情服务业务逻辑层
 */
@Service
public class ProductDetailsServiceImpl implements ProductDetailsService {

    @Autowired
    private ProductDetailsMapper productDetailsMapper;

    @Autowired
    private ImgsMapper imgsMapper;

    @Autowired
    private InfoMapper infoMapper;

    @Autowired
    private RedisCache redisCache;

    // 获取 fastdfs storage 的 nginx 代理服务器地址
    @Value("${origin}")
    private String origin;

    /**
     * 主键查询商品。
     * 需要将商品中的图片地址，从相对路径修改为绝对路径。
     *
     * @param id
     * @return
     */
    @Override
    public Item selectItemById(String id) {
        // 从缓存中取
        Item cacheObject = redisCache.getCacheObject("item:" + id);

        if (Objects.nonNull(cacheObject)) { return cacheObject;}

        // 缓存中没有从数据库取
        // 主键查询
        Item item = productDetailsMapper.selectItemById(id);

        item.setImgs(imgsMapper.selectImg(item.getId()));

        item.setInfo(infoMapper.selectInfo(item.getId()));

        // 把图片的相对路径修改成绝对路径。
        List<String> imgs = item.getImgs().stream()
                .map(img -> origin + img).collect(Collectors.toList());
        item.setImgs(imgs);

        // 缓存
        redisCache.setCacheObject("item:" + id, item);
        return item;
    }

}
